<?php

/**
 * Исключение, генерируемое фильтрами цепочки для прерывания обработки запроса.
 *
 */
abstract class Kernel_Filter_Exception extends Exception {

    /**
     * Текстовое представление типа исключения.
     *
     * @var string
     */
    protected $_status_text;

    /**
     * Контекст, в котором произошла ошибка.
     *
     * @var array
     */
    private $context = array();

    /**
     * Конструктор.
     *
     * @param   string  $message
     * @param   array   $context
     * @param   integer $code
     */
    public function __construct($message, $context = array(), $code = null) {
        parent::__construct($message, $code);
        $this->context = $context;
    }

    /**
     * Возвращает текстовое представление типа исключения.
     *
     * @return  string
     */
    public function getStatusText() {
        return $this->_status_text;
    }

    /**
     * Возвращает HTTP-заголовки, соответствующие исключению.
     *
     * @return  array
     */
    public function getHeaders() {
        return array();
    }

    /**
     * Возвращает дополнительные параметры исключения.
     *
     * @return  array
     */
    public function getParams() {
        return array(
            'context' => array_merge(array_extract(current($this->getTrace()), array('file', 'line')), $this->context)
        );
    }
}
